//注册小程序app.js

/**
 * 每个小程序都需要在 app.js 中调用 App 方法注册小程序示例，绑定生命周期回调函数、错误监听和页面不存在监听函数等。
 * 
 * App() 必须在 app.js 中调用,必须调用且只能调用一次
 * 
 * 整个小程序只有一个 App 实例，是全部页面共享的。开发者可以通过 getApp 方法获取到全局唯一的 App 示例，获取App上的数据或调用开发者注册在 App 上的函数。
 */
App({
  // 生命周期回调——监听小程序初始化。
  /**
   * 小程序初始化完成时触发，全局只触发一次。回调参数也可以使用 wx.getLaunchOptionsSync 获取
   * 返回参数
   * Object
属性	                     类型	           说明
path	                    string	        启动小程序的路径
scene	                    number	        启动小程序的场景值（具体场景值参考https://developers.weixin.qq.com/miniprogram/dev/reference/scene-list.html）
query	                    Object	        启动小程序的 query 参数
shareTicket	              string	        shareTicket，获取转发信息（详见：注1）
referrerInfo	            Object	        来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 {}。(详见：注2)
   */
  /**
   * 注1
   * 获取更多转发信息
   * 通常开发者希望转发出去的小程序被二次打开的时候能够获取到一些信息，例如群的标识。现在通过调用 wx.showShareMenu 并且设置 withShareTicket 为 true ，当用户将小程序转发到任一群聊之后，此转发卡片在群聊中被其他用户打开时，可以在 App.onLaunch 或 App.onShow 获取到一个 shareTicket。通过调用 wx.getShareInfo 接口传入此 shareTicket 可以获取到转发信息
   * 
   * 说人话：
   * 即可以通过设置转发withShareTicket为true在另一个页面中通过shareTicket获取wx.getShareInfo 接口回调以取得更多转发信息
   * 如：A用户在将Test小程序转发至C微信群，此时B用户通过点击C微信群中的小程序卡片进入小程序，此时开发者可通过App.onLaunch或wx.getLaunchOptionsSync获取shareTicket，
   * 然后将shareTicket传入wx.getShareInfo获取回调，回调中的敏感数据为加密的需后台校验解密开放数据（解密详见：https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html）
   */
  /**
   * 注2
   * referrerInfo 结构
属性	        类型	     说明
appId	      string	  来源小程序、公众号或 App 的 appId
extraData	  Object	  来源小程序传过来的数据，scene=1037或1038时支持

注意：
部分版本在无referrerInfo的时候会返回 undefined，建议使用 options.referrerInfo && options.referrerInfo.appId 进行判断
   */
  onLaunch: function(options) {
    //小程序初始化完后，打印回调参数，同wx.getLaunchOptionsSync函数一样
    console.log(options)

    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })

  },
  // 生命周期回调——监听小程序启动或切前台。
  /**
   * 小程序启动，或从后台进入前台显示时触发。也可以使用 wx.onAppShow 绑定监听
   * 回调参数同onLaunch或wx.getLaunchOptionsSync一样，区别在于 onLaunch 全局只生效一次，而onShow每次进入小程序前台或启动都会触发
   */
  onShow: function(options) {
    console.log("Look Me")
  },

  // 生命周期回调——监听小程序切后台
  /**
   * 小程序从前台进入后台时触发。也可以使用 wx.onAppHide 绑定监听
   */
  onHide: function() {
    console.log("awsl")
  },

  // 错误监听函数。
  /**
   * 小程序发生脚本错误或 API 调用报错时触发。也可以使用 wx.onError 绑定监听
   */
  onError(msg) {
    console.log(msg)
  },
  // 页面不存在监听函数
  /**
   * 小程序要打开的页面不存在时触发。也可以使用 wx.onPageNotFound 绑定监听
   * 返回参数
   * 
属性	          类型	        说明
path	        string	      不存在页面的路径
query	        Object	      打开不存在页面的 query 参数
isEntryPage	  boolean	      是否本次启动的首个页面（例如从分享等入口进来，首个页面是开发者配置的分享页面）
注意：
开发者可以在回调中进行页面重定向，但必须在回调中同步处理，异步处理（例如 setTimeout 异步执行）无效。
若开发者没有调用 wx.onPageNotFound 绑定监听，也没有声明 App.onPageNotFound，当跳转页面不存在时，将推入微信客户端原生的页面不存在提示页面。
如果回调中又重定向到另一个不存在的页面，将推入微信客户端原生的页面不存在提示页面，并且不再第二次回调

（通常可以在此处配置自己的不存在页面）
   */
  onPageNotFound(res) {
    wx.redirectTo({
      url: 'pages/...'
    }) // 如果是 tabbar 页面，请使用 wx.switchTab
  },


  // 其他	类型：any  非必填 	可以添加任意的函数或数据变量到 Object 参数中，用 this（即app实例） 可以访问
  /**
   * 可添加全局函数，获取app应用实例后即可使用
   * 
   * 如下：
   * const app = getApp()；
   * 
   * app.test(23333)
   * 
   * 控制台将打印"23333"
   */
  test: function(e) {
    console.log(e)
  },
  //全局变量，全局可用，一般用于保存用户信息
  globalData: {
    userInfo: null
  }


})